package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.mapper.EmpExprMapper;
import com.itheima.mapper.EmpLogMapper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.*;
import com.itheima.service.EmpLogService;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    EmpMapper em;
    @Autowired
    EmpExprMapper eem;
   @Autowired
    EmpLogService els;

  /*  public PageResult onepage(Integer start,Integer pageSize) {
     //在service层中我们做一些数据的处理。一般我们把数据的处理留在service层，在mapper层
     通过原始的SQL语句获取数据就好了。当数据来的时候在service层进行加工，走的时候在service层进行
     完善//
   //在这里我们把开始的页码转换成索引start1，
   //索引=（起始页码-1）*一页呈现数据的条数
        Integer start1=(start-1)*pageSize;
        PageResult<Emp> a=new PageResult<>(em.count(), em.pagefind(start1,pageSize));
        return a;
    }*/
  public PageResult<Emp> onepage(Integer start,Integer pageSize){
      //设置分页参数
      PageHelper.startPage(start,pageSize);
      //执行查询
      List<Emp> empList=em.pagefind();
      //解析查询结果，并封装
      Page<Emp> p=(Page)empList;
      return new PageResult<Emp>(p.getTotal(),p.getResult());
  }
//条件查询员工的信息
    @Override
    public PageResult<Emp> confind(EmpQueryParam eqp) {
      //调用pagehelper自带的startpage属性，传递页数和每页展示的数量
        PageHelper.startPage(eqp.getPage(),eqp.getPageSize());
     //调用mapper层的方法获取SQL语句返回的集合
        List<Emp> empList2=em.confin(eqp.getName(),eqp.getGender(),eqp.getBegin(),eqp.getEnd());
     //把集合强转为page类型
        Page<Emp> p=(Page)empList2;
    //返回我们需要的pageresult类型的内容
        return new PageResult<Emp>(p.getTotal(),p.getResult());
    }
//插入员工信息，包括工作经历
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void insertemp(Emp e) {
        try {
            e.setUpdateTime(LocalDateTime.now());
            e.setCreateTime(LocalDateTime.now());
            em.insertemp1(e);
            //员工经历是谁的，需要把添加的员工的主键id给到empexpr中的empId去
            List<EmpExpr> exprList=e.getExprList();
            if (!CollectionUtils.isEmpty(exprList)){
                for(EmpExpr a:exprList){
                    a.setEmpId(e.getId());
                }
                eem.insertBatch(exprList);
            }
        } finally {
            els.insertLog(new EmpLog(null,LocalDateTime.now(),"新增员工"+e.getName()));
        }

        //记录操作日志

      /*元素类型：数组或集合里面的数据类型是什么
        for (元素类型 变量名 : 要遍历的数组或集合) {
               循环体，使用变量名访问当前元素
        }*/

    }


    @Override
    public void delete(List<Integer> intid) {
        em.deleteemp(intid);
    }
    //查询回显（修改数据的第一步）
    @Override
    public Emp findemp(Integer id) {
        return em.findemp(id);
    }
//修改emp和emp_expr表（修改数据的第二部）
    @Override
    public void changeemp(Emp emp) {
        emp.setUpdateTime(LocalDateTime.now());
        //修改基本信息
        em.changeemp1(emp);
        /*修改工作经历，先删掉工作经历，再添加。但注意：如果员工原本没有工作经历
        下面的函数是不需要的*/
        List<EmpExpr> empexpr=emp.getExprList();
        if(!empexpr.isEmpty()){
        //编写删除员工工作经历的函数
        eem.deletebyid(emp.getId());
        //编写添加工作经历的函数
        eem.addbyid(empexpr,emp.getId());
        }
    }

    @Override
    public List<Emp> getallemp() {
        return em.getallemp();
    }


}
